package com.simple.common.entity.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.simple.common.entity.po.sys.Trade;
import com.simple.common.entity.typehandler.MyJacksonTypeHandler;
import lombok.Data;

import java.math.BigDecimal;
import java.sql.Time;
import java.util.Map;

/**
 * @author yasud
 * @date 2021年09月16日 23:15
 * @description
 */
@Data
@TableName(value = "t_trade", autoResultMap = true)
public class TradeEntity extends BaseTimeEntity {

    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 商户code
     */
    private String merchantCode;

    /**
     * 商户名称
     */
    private String merchantName;

    /**
     * apiCode
     */
    private String apiCode;

    /**
     * api名称
     */
    private String apiName;

    /**
     * 渠道商户名称
     */
    private String channelMerchantName;

    /**
     * 渠道商户id
     */
    private String channelMerchantMid;

    /**
     * 订单金额
     */
    private BigDecimal orderAmount;

    /**
     * 订单币种
     */
    private String orderCurrency;

    /**
     * 实际支付金额
     */
    private BigDecimal realAmount;

    /**
     * 实际支付币种
     */
    private String realCurrency;

    /**
     * 渠道返回支付金额
     */
    private BigDecimal channelAmount;

    /**
     * 渠道返回支付币种
     */
    private String channelCurrency;

    /**
     * 订单状态
     */
    private Status status;

    /**
     * 退款总金额
     */
    private BigDecimal refundAmount;

    /**
     *  退款金额情况
     */
    private RefundTradeEntity.RefundStatus refundStatus;

    /**
     * 交易信息
     */
    private String msg;

    /**
     * 商户订单
     */
    private String merchantOrderNo;

    /**
     * 渠道订单
     */
    private String channelOrderNo;

    /**
     * 渠道订单状态
     */
    private String channelStatus;

    /**
     * 渠道返回交易信息
     */
    private String channelMsg;

    /**
     * 信用卡号
     */
    private String cardNo;

    /**
     * 信用卡过期年
     */
    private String cardExpireYear;

    /**
     * 信用卡过期月
     */
    private String cardExpireMonth;

    /**
     * 信用卡cvv
     */
    private String cardCvv;

    /**
     * 持卡人姓，名
     */
    private String cardHolder;

    /**
     * 跳转支付，跳转地址
     */
    private String redirectUrl;

    /**
     * 渠道回调地址
     */
    private String asyncUrl;

    /**
     * 账单信息
     */
    private String billingInfo;

    /**
     * 拓展信息
     */
    @TableField(typeHandler = MyJacksonTypeHandler.class)
    private Map<String, Object> extraInfo;

    /**
     * 商品信息
     */
    private String goodsList;

    /**
     * 物流信息
     */
    private String shippingInfo;

    private Long channelMerchantId;

    private String ymd;

    private Time time;

    private String orderDesc;

    private String remark1;

    /**
     * 代付方式
     */
    private Trade.WithdrawalType withdrawalType;

    /**
     * 收款人姓名
     */
    private String accName;
    /**
     * 收款账号
     */
    private String accNumber;

    private Trade.Type type;

    /**
     * 订单状态
     */
    public enum Status {
        /**
         * 订单已受理
         */
        ACCEPT,

        /**
         * 支付中
         */
        PENDING,

        /**
         * 支付成功
         */
        SUCCESS,

        /**
         * 支付失败
         */
        FAILED;
    }

}
